package com.javacoo.swing.jxbrowser.engine;

import java.awt.BorderLayout;

import javax.swing.JFrame;
import javax.swing.WindowConstants;

import com.javacoo.swing.jxbrowser.BaseBrowser;
import com.teamdev.jxbrowser.chromium.Browser;
import com.teamdev.jxbrowser.chromium.BrowserContext;
import com.teamdev.jxbrowser.chromium.BrowserContextParams;
import com.teamdev.jxbrowser.chromium.StorageType;
import com.teamdev.jxbrowser.chromium.events.DisposeEvent;
import com.teamdev.jxbrowser.chromium.events.DisposeListener;
import com.teamdev.jxbrowser.chromium.swing.BrowserView;

/**
 * 处理浏览器
 * <li></li>
 *  如果不需要使用Browser实例，则必须使用Browser.dispose（）方法对其进行处理。
 *
 * browser.dispose();
 *
 * 访问已处理的实例
 *
 * 一旦dispose了Browser实例，就不能再使用它了。如果您尝试访问已经处置的Browser实例，则将抛出IllegalStateException异常。例如：
 *
 * browser.dispose();
 * browser.getDocument(); // IllegalStateException will be thrown
 *
 * 要检查是否 已放置浏览器实例，可以使用 Browser.isDisposed（） 方法。
 * Dispose 事件
 *
 * 每个Browser实例也可以通过window.close（）函数从JavaScript进行disposed。在这种情况下，您可能有兴趣在disposed浏览器实例时接收通知。要获得此类通知，您可以使用DisposeListener。例如：
 *
 * browser.addDisposeListener(new DisposeListener<Browser>() {
 *     @Override
 *     public void onDisposed(DisposeEvent<Browser> event) {
 *         // Browser is disposed
 *     }
 * });
 *
 * 通过Browser.dispose（） 方法手动配置 Browser 实例时 ，也会触发Dispose事件。
 *
 *
 *
 * @author: duanyong@jccfc.com
 * @since: 2020/9/24 8:39
 */
public class DisposingBrowser extends BaseBrowser {
    public static void main(String[] args) {
        BrowserContextParams params = new BrowserContextParams("user-data-dir");
        //配置Browser实例以“隐身”模式工作并将所有用户数据存储在内存中
        params.setStorageType(StorageType.MEMORY);

        BrowserContext browserContext = new BrowserContext(params);
        Browser browser = new Browser(browserContext);
        BrowserView view = new BrowserView(browser);

        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        frame.add(view, BorderLayout.CENTER);
        frame.setSize(700, 500);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);

        browser.loadURL(BASE_URL);
        //Dispose 事件
        browser.addDisposeListener(new DisposeListener<Browser>() {
            @Override
            public void onDisposed(DisposeEvent<Browser> event) {
                // Browser is disposed
            }
        });
        browser.dispose();
        browser.getDocument(); // IllegalStateException will be thrown


    }
}
